package com.itheima.demo03;

public class BinarySearchDemo01 {
    public static void main(String[] args) {
        //二分查找 / 也叫折中查找
        //使用二分查找的条件，数据必须是有序的
        //1.定义数据
        int[] arr = {2,34,55,67,78,90,122};

        System.out.println(binarySearch(arr, 34));
    }


    //定义查找方法  并返回对应的索引值
    public static int binarySearch(int[] arr,int number){
        //1.定义两个变量记录 最小索引和最大索引
        int min = 0;
        int max = arr.length - 1;

        //2.利用while循环 查找，当 min > max 时，结束循环
        while (true){
            if (min > max){
                return -1;
            }
            //3.判断要查询的值是mid的在左边还是右边
            int mid = (min + max) / 2;//获取中间的索引值

            if (arr[mid] > number){
                //如果mid索引对应的值大于查询的值，证明 number 是在mid的左边,那么min不变
                max = mid - 1;
            }else if (arr[mid] < number){
                //如果mid索引对应的值小于查询的值，证明 number 是在mid的左边,那么max不变
                min = mid + 1;
            }else {//如果mid索引对应的值和number相等 就返回mid 证明mid就是要查询的值所在的所以
                return mid;
            }

        }
    }

}
